class Observer{
    constructor(data){
        this.observe(data)
    }
    observe(data){
     // 将原有的数据属性改成get和set形式
      if( !data || typeof data !== 'object'){
           return
      }
      // 要将数据 一一劫持  1先获取到data的key 和 value
        Object.keys(data).forEach(key=>{
            // 劫持
            this.defineReactive(data,key,data[key]);
            this.observe(data[key]) //深度定位劫持
        })

    }
    // 定义数据相应式
    defineReactive(obj,key,value){
        let me = this;
      Object.defineProperty(obj,key,{
          enumerable:true,
          configurable:true,
          get(){
             return value
          },
          set(newValue){  // 给data属性中设置值的时候，获取属性的的值
           if(newValue != value){
               // 这里的this不是实例
               me.observe(newValue);
               value = newValue
           }

          }
      })
    }

}